package com.sheepjin.design_pattern.结合使用设计模式.策略_工厂_模板.entity;

import com.sheepjin.design_pattern.结合使用设计模式.策略_工厂_模板.intf.Price;

import java.math.BigDecimal;

/**
 * @author： SheepJin
 * @date： 2022/6/10 - 09:29
 * @description：此类就是模板模式的实现，通过抽象类，让子类实现具体的操作
 * @modifiedBy：
 */
public abstract class CaclPrice implements Price {

    /**
     * 实现接口获取方法（mac的idea快捷键：command+n）
     * @param goodsPrice 商品价格
     * @return 用户价格
     */
    @Override
    public BigDecimal getCustomerPrice(BigDecimal goodsPrice) {
        if (goodsPrice.compareTo(BigDecimal.ZERO) >= 0){
            return this.caclPrice(goodsPrice);
        }
        return BigDecimal.ZERO;
    }

    /**
     * 根据商品价格计算会员价格：根据子类实现的策略进行计算
     * @param goodsPrice 商品价格
     * @return 会员价格
     */
    protected abstract BigDecimal caclPrice(BigDecimal goodsPrice);
}
